iT邦幫忙

2022 iThome 鐵人賽

DAY 7
0

接下來我們要來建立測試檔囉

step 1 在 gemspec 檔案加入測試語法

我們目前在開發以 Rack 為基底的套件
使用 rack-test 會讓測試更方便

到 gemspec 加入下列兩個測試工具

spec.add_development_dependency "rack-test"
spec.add_development_dependency "minitest"

web小辭典

▶ rack-test: 輕量又簡單的 Rack 測試 API,可使用 cookie jar 傳送request、持續傳送 request等

▶ minitest: 輕量又快速的測試框架,提供豐富的斷言
(斷言指的是測試的判斷結果),讓測試結果簡單又好讀

step 2 bundle install

只要 gemspec 有做修改
就要用 bundle install
避免剛加入的套件沒加到

step 3 新增 test 資料夾及 test_helper

# /rainbow
> mkdir test
> cd test
# /rainbow/test
> test_helper.rb

做測試會需要用到測試工具
接下來我們就把 rack/test 跟 minitest 這兩個測試工具載入

語法解釋

▶ LOAD_PATH 是 Ruby 用來存放檔案路徑的模組
當接收到 request 請求時
Ruby 就會去搜尋同樣名字的檔案並載入

▶ expand_path 會把相對路徑轉換成絕對路徑,當檔案有任何變動時,比較不會找錯檔案

▶ FILE 會把前面參數的路徑完整秀出來

$LOAD_PATH.unshift File.expand_path("../../lib", __FILE__)
require "rulers"
require "rack/test"
require "minitest/autorun"

step 4 新增 application_test.rb 並加入測試語法

# /rainbow/test/application_test.rb

# 從資料夾中確認是否有 test_helper,而不採用 LOAD_PATH 去找
require_relative "test_helper"

class TestApp < Rulers::Application
end

class RulersAppTest < Minitest::Test
  include Rack::Test::Methods
  def app
    TestApp.new
  end
  def test_request
    get "/"
    assert last_response.ok?
    body = last_response.body
    assert body["Hello"]
  end 
end

step 5 跑測試

> ruby test/application_test.rb

# Running:

.

Finished in 0.019610s, 50.9944 runs/s, 101.9888 assertions/s.
1 runs, 2 assertions, 0 failures, 0 errors, 0 skips

使用其他 server

我們目前使用的是 Ruby 內建的 server(WEBRick)
但預設的 WEBRick 並不會同步改變顯示畫面
所以每次變更都要重啟 server

我們可以用其他 Application Server 代替

Unicorn 會自動去尋找 config.ru 檔並建立起 server
我們就來用 Unicorn 吧

step 1

安裝 Unicorn

> gem install unicorn

Fetching unicorn-6.1.0.gem
Fetching kgio-2.11.4.gem
Fetching raindrops-0.20.0.gem
Building native extensions. This could take a while...
Successfully installed kgio-2.11.4
....
3 gems installed

step 2 重啟server

unicorn -p 3001

web小辭典

▶ Application Server: 在傳送 HTTP request 時,用來安裝、運作、執行應用程式的服務

▶ HTTP request 流程圖

排除版控

一開始安裝 rainbow 時
會送給我們一個 .gitignore 檔

.gitignore 檔 主要是收錄不想進版控的檔案
舉凡金鑰、套件的檔案(rainbow-0.0.1.gem)

rainbow-*.gem

上一篇
Day 06 完整框架的基本功能(一)
下一篇
Day 08 建立 Controller
系列文
從0開始刻 淺談 Rails 的運作魔法30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言